﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PeliGo.BL;
using PeliGo.DataModel;

namespace PeliGo.UI
{
    public partial class frmVentas : Form
    {
        private EjemplarBL objEjemplarBL;
        private EjemplarBL obj2EjemplarBL;
        private DataTable dtable = new DataTable();
        private float total;

        private GeneroBL GeneroBL = new GeneroBL();
        private FormatoBL FormatoBL = new FormatoBL();

        private Ejemplar objEjemplar = new Ejemplar();

        public frmVentas()
        {
            InitializeComponent();
        }

        public void ConfigurarControles(DataGridView dgv)
        {
            dgv.AllowDrop = false;
            dgv.AllowUserToAddRows = false;
            dgv.AllowUserToDeleteRows = false;
            dgv.AllowUserToResizeColumns = false;
            dgv.AllowUserToResizeRows = false;
            dgv.ReadOnly = true;
            dgv.MultiSelect = false;
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        public void ConfigurarControles2(DataGridView dgv)
        {
            dgv.AllowDrop = false;
            dgv.AllowUserToAddRows = true;            
            dgv.AllowUserToDeleteRows = true;
            dgv.AllowUserToResizeColumns = false;
            dgv.AllowUserToResizeRows = false;
            dgv.ReadOnly = true;
            dgv.MultiSelect = false;
            dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        void CargarGrilla()
        {
            objEjemplarBL = new EjemplarBL();
            dgvBusqueda.DataSource = objEjemplarBL.BusquedaEjemplar(txtPelicula.Text, Int32.Parse(cmbGenero.SelectedValue.ToString()), Int32.Parse(cmbFormato.SelectedValue.ToString()));
            dgvBusquedaConfigurar();
        }

        private void dgvBusquedaConfigurar()
        {
            DataGridViewCellStyle csLetras = new DataGridViewCellStyle();
            csLetras.Alignment = DataGridViewContentAlignment.MiddleLeft;

            dgvBusqueda.Columns["Pelicula"].DisplayIndex = 0;
            dgvBusqueda.Columns["Pelicula"].HeaderText = "Película";
            dgvBusqueda.Columns["Pelicula"].Width = 207;
            dgvBusqueda.Columns["Pelicula"].DefaultCellStyle = csLetras;
            dgvBusqueda.Columns["Pelicula"].HeaderCell.Style = csLetras;

            dgvBusqueda.Columns["Formato"].DisplayIndex = 1;
            dgvBusqueda.Columns["Formato"].HeaderText = "Formato";
            dgvBusqueda.Columns["Formato"].Width = 125;
            dgvBusqueda.Columns["Formato"].DefaultCellStyle = csLetras;
            dgvBusqueda.Columns["Formato"].HeaderCell.Style = csLetras;

            dgvBusqueda.Columns["Stock"].DisplayIndex = 2;
            dgvBusqueda.Columns["Stock"].HeaderText = "Stock";
            dgvBusqueda.Columns["Stock"].Width = 80;
            dgvBusqueda.Columns["Stock"].DefaultCellStyle = csLetras;
            dgvBusqueda.Columns["Stock"].HeaderCell.Style = csLetras;

            dgvBusqueda.Columns["Precio"].DisplayIndex = 3;
            dgvBusqueda.Columns["Precio"].HeaderText = "Precio";
            dgvBusqueda.Columns["Precio"].Width = 80;
            dgvBusqueda.Columns["Precio"].DefaultCellStyle = csLetras;
            dgvBusqueda.Columns["Precio"].HeaderCell.Style = csLetras;

            dgvBusqueda.Columns["EjemplarId"].Visible = false;

            dgvBusqueda.ClearSelection();
        }

        private void AgregarDatoCarrito()
        {
            //simple way create object for rowvalues here i have given only 2 add as per your requirement
            object[] RowValues = { "","","",""};

            //assign values into row object
            RowValues[0] = objEjemplar.Pelicula.NPelicula.ToString();
            RowValues[1] = objEjemplar.Formato.NFormato.ToString();
            RowValues[2] = objEjemplar.PrecioActual.ToString();
            RowValues[3] = objEjemplar.EjemplarId.ToString();

            //create new data row
            DataRow dRow;
            dRow = dtable.Rows.Add(RowValues);
            dtable.AcceptChanges();
        }

        void CargarGrilla2()
        {
            obj2EjemplarBL = new EjemplarBL();
            AgregarDatoCarrito();
            dgvCarrito.DataSource = dtable;
            dgvBusquedaConfigurar2();
        }

        private void dgvBusquedaConfigurar2()
        {
            DataGridViewCellStyle csLetras = new DataGridViewCellStyle();
            csLetras.Alignment = DataGridViewContentAlignment.MiddleLeft;

            //dgvCarrito.Columns["0"].DisplayIndex = 0;
            //dgvCarrito.Columns["0"].HeaderText = "Película";
            dgvCarrito.Columns["Pelicula"].Width = 247;
            dgvCarrito.Columns["Pelicula"].DefaultCellStyle = csLetras;
            dgvCarrito.Columns["Pelicula"].HeaderCell.Style = csLetras;

            //dgvBusqueda.Columns["1"].DisplayIndex = 1;
            //dgvBusqueda.Columns["1"].HeaderText = "Formato";
            dgvCarrito.Columns["Formato"].Width = 150;
            dgvCarrito.Columns["Formato"].DefaultCellStyle = csLetras;
            dgvCarrito.Columns["Formato"].HeaderCell.Style = csLetras;                 

            //dgvBusqueda.Columns["2"].DisplayIndex = 2;
            //dgvBusqueda.Columns["2"].HeaderText = "Precio S/.";
            dgvCarrito.Columns["Precio S/."].Width = 95;
            dgvCarrito.Columns["Precio S/."].DefaultCellStyle = csLetras;
            dgvCarrito.Columns["Precio S/."].HeaderCell.Style = csLetras;

            dgvCarrito.Columns["Id"].Visible = false;

            dgvBusqueda.ClearSelection();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void frmVentas_Load(object sender, EventArgs e)
        {
            ConfigurarControles(dgvBusqueda);
            ConfigurarControles2(dgvCarrito);            

            this.cmbGenero.DataSource = GeneroBL.ListarGenero();
            this.cmbGenero.DisplayMember = "NGenero";
            this.cmbGenero.ValueMember = "GeneroId";

            this.cmbFormato.DataSource = FormatoBL.ListarFormato();
            this.cmbFormato.DisplayMember = "NFormato";
            this.cmbFormato.ValueMember = "FormatoId";

            this.txtFecha.Text = DateTime.Today.ToString().Substring(1,10);

            dtable.Columns.Add(new DataColumn("Pelicula"));
            dtable.Columns.Add(new DataColumn("Formato"));
            dtable.Columns.Add(new DataColumn("Precio S/."));
            dtable.Columns.Add(new DataColumn("Id"));            
        }

        private void btnCarrito_Click(object sender, EventArgs e)
        {
            if (dgvBusqueda.SelectedRows.Count == 0)
            {
                MessageBox.Show("Por favor, seleccionar un campo", "PeliGo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            int EjemplarId = Convert.ToInt32(dgvBusqueda.SelectedRows[0].Cells["EjemplarId"].Value);
            objEjemplar = objEjemplarBL.ObtenerEjemplar(EjemplarId);
            CargarGrilla2();

            total = 0;

            for (int i = 0; i < dgvCarrito.RowCount -1 ; i++)
            {
                
                total = total + float.Parse(dgvCarrito.Rows[i].Cells["Precio S/."].Value.ToString());
                txtTotal.Text = total.ToString();
            }
        }

        private void dgvCarrito_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
        {
            
        }

        private void dgvCarrito_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            
        }

        private void btnVenta_Click(object sender, EventArgs e)
        {
            if (dgvCarrito.RowCount == 0)
            {
                MessageBox.Show("El carrito esta vacio.", "PeliGo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (MessageBox.Show("¿Desea registrar la venta?", "PeliGo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Venta objVenta = new Venta();
                VentaBL objVentaBL = new VentaBL();
                EjemplarBL objEjemplarBL2 = new EjemplarBL();
                objVenta.EmpleadoId = 1;
                objVenta.Fecha = DateTime.Today;
                objVenta.Estado = 1;
                objVenta.Total = decimal.Parse(txtTotal.Text.ToString());

                objVentaBL.AgregarVenta(objVenta);

                for (int i = 0 ; i < dgvCarrito.RowCount - 1 ; i++ )
                {
                    Detalle_Venta objDetalle = new Detalle_Venta();                    
                    objDetalle.Cantidad = 1;
                    objDetalle.Estado = 1;
                    objDetalle.PrecioHistorico = decimal.Parse(dgvCarrito.Rows[i].Cells["Precio S/."].Value.ToString());
                    objDetalle.EjemplarId = Int32.Parse(dgvCarrito.Rows[i].Cells["Id"].Value.ToString());
                    objDetalle.VentaId = Int32.Parse(objVenta.VentaId.ToString());

                    objEjemplarBL2.ReducirStock(objDetalle.EjemplarId,objDetalle.Cantidad);

                    objVentaBL.AgregarDetalle(objDetalle);                    
                }

                MessageBox.Show("Se registro correctamente la Venta.", "PeliGo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Close();
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
                       
        }
    }
}
